package com.hrbxlh.dao;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

@Repository
public interface RelStuClassDao {

	/**
	 * @description 添加学生与班级关联的方法，参数key与数据库column对应即可。 
	 * @param Map<String,Object> paramMap
	 * @return
	 * @throws Exception
	 */
	 boolean addRelStuClass(Map<String, Object> paramMap) throws Exception;

	/**
	 * @description 更新学生与班级关联的方法，参数key与数据库column对应即可。
	 * @param Map<String,Object> paramMap
	 * @return
	 * @throws Exception
	 */
	 boolean updateRelStuClassByStuId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @description 通过学号删除学生与班级的关联表
	 * @param List<Integer> 学生id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelStuClassBySId(List<String> paramList) throws Exception;

	/**
	 * @description 通过班级号删除关联表的人和班级
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelStuClassByClassId(List<String> paramList) throws Exception;

	/**
	 * @description 通过班级号删除课程班级关联表
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelcourseClassByClassId(List<String> paramList) throws Exception;

	/**
	 * @description 通过班级号删除消息班级关联表
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelnotClassByClassId(List<String> paramList) throws Exception;

	/**
	 * @description 通过班级号删除教师班级关联表
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelteaClassByClassId(List<String> paramList) throws Exception;

	/**
	 * @description 通过工号删除教师班级关联表
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelteaClassByStuOrTeaId(List<String> paramList) throws Exception;

	/**
	 * @description 通过教师号删除教师班级关联表（刑新加的表）
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delClassRelByStuOrTeaId(List<String> paramList) throws Exception;

	/**
	 * @description 通过教师/学号删除人与课程的关联表
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelstuCouByStuorteaId(List<String> paramList) throws Exception;

	/**
	 * @description 通过教师/学号删除人与课程的关联表(删除班级时用)
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelstuCouByStuorteaIdClass(List<Map<String,Object>> paramList) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过教师号获取此教师所属班级
	 * @throws IOException
	 */
	 List<String> getClassByStuorteaId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过教师号获取此教师所属班级及课程
	 * @throws IOException
	 */
	List<Map<String, Object>> getClassAndCourseByStuorteaId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过班号获取此班级所属课程
	 * @throws IOException
	 */
	 List<Map<String,Object>> getRelCourseByClassId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @description 通过课程号/学号添加人与课程的关联表
	 * @param List<Integer> 学号和课程号的集合
	 * @return
	 * @throws Exception
	 */
	 boolean addRelstuCouByStuAndCou(Map<String, Object> map) throws Exception;

	/**
	 * @description 通过课程号/学号更新人与课程的关联表
	 * @param List<Integer> 学号和课程号的集合
	 * @return
	 * @throws Exception
	 */
	 boolean upRelstuCouByStuAndCou(Map<String, Object> map) throws Exception;

	/**
	 * @param paramMap
	 * @return  查询当前人是否和当前课程有关联
	 * @throws IOException
	 */
	 Map<String,Object> getRelStuCouByStuCou(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过学号、课程号查询当前登陆人所属教师
	 * @throws IOException
	 */
	 Map<String,Object> getRelTeaIdByStuId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过教师号获取此教师所属班级(消息通知那---结课的班级不要)
	 * @throws IOException
	 */
	 List<Map<String,Object>> getClassByStuorteaIdAndNo(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  查询当前要评价学生所在班级所属课程(参数是学号、课程号)
	 * @throws IOException
	 */
	 Map<String,Object> getStuClaAndCou(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  查询当前登录人（教师）所教的班级
	 * @throws IOException
	 */
	 List<Integer> getClassIdListByTeaId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  查询当前学生是否是当前教师所教的学生
	 * @throws IOException
	 */
	 List<Map<String,Object>> getStuByTeaIdAndClassId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  查询当前人是否和relstuclass有关联
	 * @throws IOException
	 */
	 Map<String,Object> getMapByStuIdAndClassId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  查询当前学生所属教师集合
	 * @throws IOException
	 */
	 List<Map<String,Object>> getStuTeaListByStuId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过当前登陆人的id查询其所教学生没有交试卷的人学号集合
	 * @throws IOException
	 */
	 List<Map<String,Object>> getStuListNoExam(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过当前登陆人的id查询其所教学生没有交试卷的人学号集合（专门为脏数据准备的）
	 * @throws IOException
	 */
	 List<Map<String,Object>> getStuListNoExamErro(Map<String, Object> paramMap) throws Exception;

	/**
	 * @description 通过noticeId删除消息班级关联表
	 * @param List<Integer> 班级id的集合
	 * @return
	 * @throws Exception
	 */
	 boolean delRelnotClassByNoticeId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过班号集合获取此班级所属课程
	 * @throws IOException
	 */
	 List<Map<String,Object>> getRelCourseByClassIdList(List<Map<String, Object>> list) throws Exception;

	/**
	 * @param paramMap
	 * @return  通过教师号获取此教师所属班级及考试状态(消息通知那---结课的班级不要)
	 * @throws IOException
	 */
	 List<Map<String,Object>> getAllClassStateByTeaId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  解除试卷与班级的关联关系用到的通过教师号获取此教师所属班级及考试状态
	 * @throws IOException
	 */
	 List<Map<String,Object>> getAllClassStateByTeaCouId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  获取当前课程当前教师所拥有的试卷
	 * @throws IOException
	 */
	 List<Map<String,Object>> getTestPaperByCouId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap  courseId,onlinequestionId
	 * @return  通过课程id和试卷主键id查询当前试卷是否已经与班级存在关联
	 * @throws IOException
	 */
	 List<Map<String,Object>> getreOnlineByCouIdAndOnId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap  courseId,stuorteaId
	 * @return  通过课程id和教师id查询教师所教的班级集合
	 * @throws IOException
	 */
	 List<Map<String,Object>> getClassByTeaIdAndCoId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return  解除试卷与班级的关联关系用到的通过教师号获取此教师所属班级及考试状态
	 * @throws IOException
	 */
	 List<Map<String,Object>> getSIdListByClassIdAndCoId(Map<String, Object> paramMap) throws Exception;

	/**
	 * @param paramMap
	 * @return 查询班级是否有人
	 * @throws IOException
	 */
	 List<Map<String,Object>> getClassHaveStudent(Map<String, Object> paramMap) throws Exception;


}
